//package com.jt.service;
//
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.jt.mapper.ItemCatMapper;
//import com.jt.pojo.ItemCat;
//import com.jt.vo.SysResult;
//import org.apache.ibatis.annotations.Delete;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import java.util.*;
//
//@Service
//public class ItemCatServiceImpl implements ItemCatService {
//    @Autowired
//    private ItemCatMapper itemCatMapper;
//
//    public Map<Integer, List<ItemCat>> getMap() {
//        Map<Integer, List<ItemCat>> map = new HashMap<>();
//        //查询所有的数据库记录
//        List<ItemCat> list = itemCatMapper.selectList(null);
//        //1.遍历数据
//        for (ItemCat itemCat : list) {
//            //获取parentId
//            int parentId = itemCat.getParentId();
//            if (map.containsKey(parentId)) {  //判断集合中是否有key
//                //表示数据存在,将自己追加
//                map.get(parentId).add(itemCat);
//            } else {
//                //key不存在, 定义list集合,将自己作为第一个元素追加
//                List<ItemCat> childrenList = new ArrayList<>();
//                childrenList.add(itemCat);
//                //将数据保存到map集合中
//                map.put(parentId, childrenList);
//            }
//        }
//        return map;
//    }
//
//    //该方法获取1-2级数据信息
//    public List<ItemCat> getTwoList(Map<Integer, List<ItemCat>> map) {
//        //1.先查询一级菜单数据
//        List<ItemCat> oneList = map.get(0);
//        //2.遍历每个一级菜单去封装二级数据
//        for (ItemCat oneItemCat : oneList) {
//            //parent_id = 一级ID
//            int parentId = oneItemCat.getId();
//            //查询二级数据
//            List<ItemCat> twoList = map.get(parentId);
//            oneItemCat.setChildren(twoList);
//        }
//        return oneList;
//    }
//
//    public List<ItemCat> getThreeList(Map<Integer, List<ItemCat>> map) {
//        List<ItemCat> oneList = getTwoList(map);
//
//        for (ItemCat oneItemCat : oneList) {
//            List<ItemCat> towList = oneItemCat.getChildren();
//            if (towList == null || towList.size() == 0) {
//                continue;
//            }
//            for (ItemCat twoItemCat : towList) {
//                int parentId = twoItemCat.getId();
//                List<ItemCat> threeLiet = map.get(parentId);
//                twoItemCat.setChildren(threeLiet);
//            }
//        }
//        return oneList;
//    }
//
//
//
//    @Override
//    public List<ItemCat> findItemCatList(Integer level) {
//        //获取所有集合数据
//        long startTime = System.currentTimeMillis();
//        Map<Integer, List<ItemCat>> map = getMap();
//        if (level == 1) {
//            //1.一级商品分类信息
//            return map.get(0);
//        }
//        if (level == 2) { //获取一级菜单和二级菜单
//            return getTwoList(map);
//        }
//        //一级商品分类信息
//        long endTime = System.currentTimeMillis();
//        System.out.println(endTime - startTime + "毫秒");
//        return getThreeList(map);
//    }
//
//    @Override
//    public void saveItemCat(ItemCat itemCat) {
//        Date date = new Date();
//        itemCat.setStatus(true)
//                .setCreated(date)
//                .setUpdated(date);
//        itemCatMapper.insert(itemCat);
//    }
//
//    @Override
//    public void delete(ItemCat itemCat) {
//        if (itemCat.getLevel() == 3) {
//            int id = itemCat.getId();
//            itemCatMapper.deleteById(id);
//            return;
//        }
//        if (itemCat.getLevel() == 2) {
//            QueryWrapper queryWrapper =
//                    new QueryWrapper();
//            int id = itemCat.getId();
//            queryWrapper.eq("parent_id", id);
//            itemCatMapper.delete(queryWrapper);
//            itemCatMapper.deleteById(id);
//            return;
//        }
//        /*最后一个if不写也行*/
//        QueryWrapper queryWrapper =
//                new QueryWrapper();
//        int id = itemCat.getId();
//        queryWrapper.eq("parent_id", id);
//        List idList = itemCatMapper.selectObjs(queryWrapper);
//        if (idList.size()>0) {
//            queryWrapper.clear();
//            queryWrapper.in("parent_id", idList);
//            itemCatMapper.delete(queryWrapper);
//            idList.add(id);
//            itemCatMapper.deleteBatchIds(idList);
//        }else {
//            itemCatMapper.deleteById(id);
//        }
//    }
//}
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
///**
//     * 弊端: 由于多次循环遍历 查询数据库,导致数据库查询次数太多效率极低.
//     * 思路:
//     *      1.刚才的业务逻辑梳理
//     *      2.如何优化?????   提高效率
//     * 优化策略:
//     *       降低用户查询数据库的次数.
//     * @param level
//     * @return
//     */
//    /*@Override
//    public List<ItemCat> findItemCatList(Integer level) {
//        //查询一级商品分类信息
//        QueryWrapper<ItemCat> queryWrapper = new QueryWrapper<>();
//        queryWrapper.eq("parent_id",0);
//        List<ItemCat> oneList = itemCatMapper.selectList(queryWrapper);
//        //查询二级商品分类信息
//        for(ItemCat oneItemCat: oneList){
//            //1.为了复用条件构造器 将之前的数据清空
//            queryWrapper.clear();
//            //查询二级数据 parent_id = 一级ID
//            queryWrapper.eq("parent_id",oneItemCat.getId());
//            List<ItemCat> twoList = itemCatMapper.selectList(queryWrapper);
//                    //遍历二级列表 查询三级数据,封装数据返回
//            //将二级封装到一级
//            oneItemCat.setChildren(twoList);
//        }
//        return oneList;
//    }*/
